{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Gradient Boosting: a practical guide"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.ensemble import GradientBoostingRegressor"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## An example: the california housing dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.datasets import fetch_california_housing\n",
    "from sklearn.metrics import median_absolute_error\n",
    "\n",
    "\n",
    "calhousing = fetch_california_housing()\n",
    "\n",
    "X, y = calhousing.data, calhousing.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".. _california_housing_dataset:\n",
      "\n",
      "California Housing dataset\n",
      "--------------------------\n",
      "\n",
      "**Data Set Characteristics:**\n",
      "\n",
      "    :Number of Instances: 20640\n",
      "\n",
      "    :Number of Attributes: 8 numeric, predictive attributes and the target\n",
      "\n",
      "    :Attribute Information:\n",
      "        - MedInc        median income in block\n",
      "        - HouseAge      median house age in block\n",
      "        - AveRooms      average number of rooms\n",
      "        - AveBedrms     average number of bedrooms\n",
      "        - Population    block population\n",
      "        - AveOccup      average house occupancy\n",
      "        - Latitude      house block latitude\n",
      "        - Longitude     house block longitude\n",
      "\n",
      "    :Missing Attribute Values: None\n",
      "\n",
      "This dataset was obtained from the StatLib repository.\n",
      "http://lib.stat.cmu.edu/datasets/\n",
      "\n",
      "The target variable is the median house value for California districts.\n",
      "\n",
      "This dataset was derived from the 1990 U.S. census, using one row per census\n",
      "block group. A block group is the smallest geographical unit for which the U.S.\n",
      "Census Bureau publishes sample data (a block group typically has a population\n",
      "of 600 to 3,000 people).\n",
      "\n",
      "It can be downloaded/loaded using the\n",
      ":func:`sklearn.datasets.fetch_california_housing` function.\n",
      "\n",
      ".. topic:: References\n",
      "\n",
      "    - Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n",
      "      Statistics and Probability Letters, 33 (1997) 291-297\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(calhousing.DESCR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']\n"
     ]
    }
   ],
   "source": [
    "print(calhousing.feature_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=1000, random_state=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's start with a quick baseline model: linear regression (aka. Ordinary Least Squares):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 15.3 ms, sys: 36.3 ms, total: 51.7 ms\n",
      "Wall time: 26.1 ms\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "%time lm = LinearRegression().fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train error: 0.413, test error: 0.419\n"
     ]
    }
   ],
   "source": [
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train, lm.predict(X_train)),\n",
    "       median_absolute_error(y_test, lm.predict(X_test))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def scatter_predictions(y_pred, y_true):\n",
    "    plt.figure(figsize=(6, 6))\n",
    "    plt.xlabel('prediction')\n",
    "    plt.ylabel('true target')\n",
    "    plt.xlim(-1, 6)\n",
    "    plt.ylim(-1, 6)\n",
    "    plt.scatter(y_pred, y_true)\n",
    "    \n",
    "scatter_predictions(lm.predict(X_test), y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is pretty bad: the errors (off-diagonal predictions) seems to be heteroschedastic and there is a saturation effect with many samples with `y_true == 5`. Let's check:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(y_train, bins=50);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can filter out the \"anomalies\" and make the target variable marginal distribution more \"Gaussian\" by taking the log:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(np.log(y_train[y_train < 4.9]), bins=50);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 23.3 ms, sys: 11.6 ms, total: 34.9 ms\n",
      "Wall time: 11.8 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "         steps=[('standardscaler',\n",
       "                 StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
       "                ('linearregression',\n",
       "                 LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
       "                                  normalize=False))],\n",
       "         verbose=False)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "\n",
    "lm2 = make_pipeline(StandardScaler(), LinearRegression())\n",
    "%time lm2.fit(X_train[y_train < 4.9], np.log(y_train[y_train < 4.9]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train error: 0.325, test error: 0.340\n"
     ]
    }
   ],
   "source": [
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train[y_train < 4.9],\n",
    "                             np.exp(lm2.predict(X_train[y_train < 4.9]))),\n",
    "       median_absolute_error(y_test[y_test < 4.9],\n",
    "                             np.exp(lm2.predict(X_test[y_test < 4.9])))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "scatter_predictions(\n",
    "    np.exp(lm2.predict(X_test[y_test < 4.9])),\n",
    "    y_test[y_test < 4.9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 7.48 s, sys: 1.45 s, total: 8.93 s\n",
      "Wall time: 2.99 s\n",
      "train error: 0.205, test error: 0.228\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.preprocessing import FunctionTransformer\n",
    "from sklearn.pipeline import make_union\n",
    "\n",
    "plm = make_pipeline(\n",
    "    StandardScaler(),\n",
    "    make_union(\n",
    "        FunctionTransformer(lambda x: x, validate=True),\n",
    "        PolynomialFeatures(degree=5)\n",
    "    ),\n",
    "    LinearRegression())\n",
    "\n",
    "%time plm.fit(X_train[y_train < 4.9], np.log(y_train[y_train < 4.9]))\n",
    "\n",
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train[y_train < 4.9],\n",
    "                             np.exp(plm.predict(X_train[y_train < 4.9]))),\n",
    "       median_absolute_error(y_test[y_test < 4.9],\n",
    "                             np.exp(plm.predict(X_test[y_test < 4.9])))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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FRD1CPYQMshk6CVsTD+pzdC5jy5Rb2EtIwq0ette3+GpoYFSSxPURGQHaxlR27iPLlFvYUCgQCY7thFR92BAoEDcR5eot3BSmQJxXQFRb2FAoFBcV0DUOzhkREREABgQiIjIwYBAREQAGBCIiMjBgEBERAAYEIiIyMGAQEREACwHBBH5gIgcF5Hvi8hmm20hIup11gKCiBQAfAnABwG8C8DNIvIuW+0hIup1NnsI7wHwfVV9VlXPAvg6gF+z2B4iop5mMyAMATjZ8POLzmNNRGSjiIyLyPipU6c61jgiol6T+UllVd2uqiOqOjI4OGi7OUREXctmQCgDuKzh50udx4iIyAKbAeEpAO8UkcUiMhfArwN41GJ7iIh6mrXy16p6TkR+D8AeAAUAX1XVo7baQ0TU66zuh6Cq3wTwTZttICKiusxPKhMRUWcwIBAREQAGBCIicjAgEBERAAYEIiJyMCAQEREABgQiInIwIBAREQAGBCIicjAgEBERAAYEIiJyMCAQEREABgQiInIwIBAREQAGBCIicjAgEBERAAYEIiJyMCAQEREABgQiInIwIBAREQAGBCIicjAgEBERAAYEIiJyMCAQEREABgQiInIwIBAREQAGBCIicjAgEBERAAYEIiJyMCAQEREABgQiInIwIBAREQAGBCIicjAgEBERAAYEIiJyMCAQEREABgQiInJYCQgicpOIHBWRaREZsdEGIiJqZquH8F0A1wP4J0vHJyIijzk2DqqqzwCAiNg4PBER+eAcAhERAUixhyAifw/gp31+9Yeq+r9ivM9GABudH98Uke8m0T5LfgrAD203og15bn+e2w6w/bblvf1LTJ6UWkBQ1V9J6H22A9gOACIyrqq5nYRm++3Jc9sBtt+2bmi/yfM4ZERERADspZ1+VEReBPBeALtFZI+NdhAR0Xm2soweAfBICy/dnnRbOozttyfPbQfYftt6ov2iqmk3hIiIcoBzCEREBCCHASGPZS9E5AMiclxEvi8im223Jy4R+aqIvJLHlF8RuUxE9onI95x/N5+y3aY4RGSeiDwpIoed9m+13aa4RKQgIpMi8ne229IKEXleRI6IyCHTbJ2sEJEBEXlIRI6JyDMi8t6w5+cuICBnZS9EpADgSwA+COBdAG4WkXfZbVVsXwPwAduNaNE5AHeo6rsArALwiZx9/m8CuEZVlwNYAeADIrLKcpvi+hSAZ2w3ok1rVHVFDlNPvwjgcVVdCmA5Iv4echcQVPUZVT1uux0xvAfA91X1WVU9C+DrAH7NcptiUdV/AvCq7Xa0QlVfVtXvON//GPX/EEN2W2VO695wfiw6X7mZ+BORSwGsA3Cf7bb0GhFZAOAXAXwFAFT1rKpOhb0mdwEhh4YAnGz4+UXk6ILUTURkEYCVAA7abUk8zpDLIQCvAPiWquap/fcC+AMA07Yb0gYF8ISITDiVE/JiMYBTAP7aGbK7T0Tmh70gkwFBRP5eRL7r85WrO2vKDhG5EMAuALep6o9stycOVa2p6goAlwJ4j4i823abTIjIhwG8oqoTttvSpver6pWoD/t+QkR+0XaDDM0BcCWAL6vqSgCnAYTOYVpZhxAlqbIXGVEGcFnDz5c6j1GHiEgR9WCwQ1Uftt2eVqnqlIjsQ30+Jw8T/KsBXCciHwIwD8BbROR+Vb3VcrtiUdWy8+crIvII6sPAeZjDfBHAiw09yocQERAy2UPoMk8BeKeILBaRuQB+HcCjltvUM6ReY/0rAJ5R1T+33Z64RGRQRAac70sAfhXAMbutMqOqd6rqpaq6CPV/93vzFgxEZL6IXOR+D+Ba5CMYQ1X/FcBJEXEL2/0ygO+FvSZ3ASFvZS9U9RyA3wOwB/UJzQdV9ajdVsUjIg8A+BcAS0TkRRH5uO02xbAawG8CuMZJGzzk3LHmxdsA7BORp1G/ufiWquYyfTOn3grg2yJyGMCTAHar6uOW2xTHJwHscP79rADwJ2FP5kplIiICkMMeAhERpYMBgYiIADAgEBGRgwGBiIgAMCAQEZGDAYGoBSLyhvPnJSLyUMRzbxOR/oafv+muLSDKEqadEjlEpKCqNcPnvqGqFxo+93kAI6r6w3baR5Q29hCoJ4jIIqcm/A6nLvxDItLv1Lr/UxH5DoCbROQdIvK4U8jsn0VkqfP6xSLyL05d/Hs87/td5/uCiPyZU3fraRH5pIj8FwCXoL64bJ/zvOdF5Kec7z/dUKvrtob3fEZE/srZA+EJZ5UyUaoYEKiXLAHwF6r67wH8CMDvOo//m6peqapfR33v2U+q6lUAfh/AXzjP+SLqRcIuB/BywPtvBLAIwApVvQL12kn/DcBLqNfTX9P4ZBG5CsBvAbga9b0a/pOIrHR+/U4AX1LVZQCmANzQ3qkTRWNAoF5yUlX3O9/fD+D9zvc7gZmKqO8D8A2n3PRfol46AqiXwHjA+f5/Brz/rwD4S6dcCVQ1ag+J9wN4RFVPO3sePAzgF5zfPaeqh5zvJ1APNESpymS1U6KUeCfM3J9PO3/2AZhySk2bvD5NbzZ8XwPAISNKHXsI1EuGG/aU/Q0A3278pbNPwnMichNQr5QqIsudX+9HvWInANwS8P7fAvDbIjLHef3FzuM/BnCRz/P/GcB6Zy5jPoCPOo8RWcGAQL3kOOobnDwDYCGAL/s85xYAH3eqWx7F+e1OP+W89giCd7y7D8AJAE87r/8N5/HtAB53J5VdztaeX0O9iuZBAPep6mSL50bUNqadUk9wts/8O1XNxW5jRDawh0BERADYQyAiIgd7CEREBIABgYiIHAwIREQEgAGBiIgcDAhERASAAYGIiBz/HwghXyOEOwsYAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "scatter_predictions(\n",
    "    np.exp(plm.predict(X_test[y_test < 4.9])),\n",
    "    y_test[y_test < 4.9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 8.37 s, sys: 80.4 ms, total: 8.45 s\n",
      "Wall time: 8.35 s\n",
      "train error: 0.201, test error: 0.212\n"
     ]
    }
   ],
   "source": [
    "from sklearn.neural_network import MLPRegressor\n",
    "\n",
    "mlp = make_pipeline(\n",
    "    StandardScaler(),\n",
    "    MLPRegressor(hidden_layer_sizes=(100, 10, 10), activation='relu'),\n",
    ")\n",
    "%time mlp.fit(X_train[y_train < 4.9], np.log(y_train[y_train < 4.9]))\n",
    "\n",
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train[y_train < 4.9],\n",
    "                             np.exp(mlp.predict(X_train[y_train < 4.9]))),\n",
    "       median_absolute_error(y_test[y_test < 4.9],\n",
    "                             np.exp(mlp.predict(X_test[y_test < 4.9])))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "scatter_predictions(\n",
    "    np.exp(mlp.predict(X_test[y_test < 4.9])),\n",
    "    y_test[y_test < 4.9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 6.65 s, sys: 56 ms, total: 6.71 s\n",
      "Wall time: 6.67 s\n",
      "train error: 0.135, test error: 0.187\n"
     ]
    }
   ],
   "source": [
    "gbr = GradientBoostingRegressor(learning_rate=0.1, max_depth=8, min_samples_leaf=20,\n",
    "                                n_estimators=100, loss='huber')\n",
    "%time gbr.fit(X_train, y_train)\n",
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train, gbr.predict(X_train)),\n",
    "       median_absolute_error(y_test, gbr.predict(X_test))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "scatter_predictions(gbr.predict(X_test), y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model size: 1.4 MB\n"
     ]
    }
   ],
   "source": [
    "from pickle import dumps\n",
    "print(\"Model size: %0.1f MB\" % (len(dumps(gbr)) / 1e6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "696 µs ± 30.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit gbr.predict(X_test[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 17.5 s, sys: 76.2 ms, total: 17.6 s\n",
      "Wall time: 5.14 s\n",
      "train error: 0.074, test error: 0.196\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor\n",
    "\n",
    "rfr = RandomForestRegressor(n_estimators=100, n_jobs=-1)\n",
    "%time rfr.fit(X_train, y_train)\n",
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train, rfr.predict(X_train)),\n",
    "       median_absolute_error(y_test, rfr.predict(X_test))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model size: 152.2 MB\n"
     ]
    }
   ],
   "source": [
    "print(\"Model size: %0.1f MB\" % (len(dumps(rfr)) / 1e6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "107 ms ± 4.36 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit rfr.predict(X_test[:100])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### New Histogram-based Gradient Boosting Trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.experimental import enable_hist_gradient_boosting\n",
    "from sklearn.ensemble import HistGradientBoostingRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 12.1 s, sys: 256 ms, total: 12.4 s\n",
      "Wall time: 3.51 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "HistGradientBoostingRegressor(l2_regularization=0.0, learning_rate=0.1,\n",
       "                              loss='least_squares', max_bins=256,\n",
       "                              max_depth=None, max_iter=100, max_leaf_nodes=256,\n",
       "                              min_samples_leaf=20, n_iter_no_change=None,\n",
       "                              random_state=None, scoring=None, tol=1e-07,\n",
       "                              validation_fraction=0.1, verbose=0)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hgbr = HistGradientBoostingRegressor(min_samples_leaf=20, max_leaf_nodes=256,\n",
    "                                     max_iter=100)\n",
    "%time hgbr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train error: 0.135, test error: 0.187\n"
     ]
    }
   ],
   "source": [
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train, gbr.predict(X_train)),\n",
    "       median_absolute_error(y_test, gbr.predict(X_test))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model size: 2.4 MB\n"
     ]
    }
   ],
   "source": [
    "print(\"Model size: %0.1f MB\" % (len(dumps(hgbr)) / 1e6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.45 ms ± 302 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit hgbr.predict(X_test[:100])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early stopping"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 10.3 s, sys: 101 ms, total: 10.4 s\n",
      "Wall time: 2.91 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "HistGradientBoostingRegressor(l2_regularization=0.0, learning_rate=0.1,\n",
       "                              loss='least_squares', max_bins=256,\n",
       "                              max_depth=None, max_iter=10000,\n",
       "                              max_leaf_nodes=256, min_samples_leaf=20,\n",
       "                              n_iter_no_change=5, random_state=None,\n",
       "                              scoring='loss', tol=1e-07,\n",
       "                              validation_fraction=0.1, verbose=0)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hgbr = HistGradientBoostingRegressor(min_samples_leaf=20, max_leaf_nodes=256,\n",
    "                                     n_iter_no_change=5, validation_fraction=0.1,\n",
    "                                     scoring=\"loss\", max_iter=10000)\n",
    "%time hgbr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train error: 0.135, test error: 0.187\n"
     ]
    }
   ],
   "source": [
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train, gbr.predict(X_train)),\n",
    "       median_absolute_error(y_test, gbr.predict(X_test))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "86"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hgbr.n_iter_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model size: 2.0 MB\n"
     ]
    }
   ],
   "source": [
    "print(\"Model size: %0.1f MB\" % (len(dumps(hgbr)) / 1e6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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HVsqvCC2taKeqvrwXucmJwQYnJHMsIHJHDVmEMMGpjBsYAp5A5MZNiCFoZnJZKaENMipiEgXUWjrJvPmzWPEiBFcc801APzkJz8hFAoxf/58tm/fTmNjI7/4xS84//zzdztv3bp1nHvuuSxZsoTa2lquuOIKPvzwQyZMmLDb3KNXX3017777LrW1tVx00UX89Kc/5dZbb6W4uJiTTz6ZnJwc5s+fz+jRoyksLCQnJ4ff/va33HnnnQBcddVVfOMb32DdunWcddZZHH/88bz55psMHz6cxx9/nJSUlO77ZUmXaoxEKd5Ry7ryGtaXV7OurIYN26rZuK2WTTtq9wpkicEAgzOTGJKZzMShmZx0iLc8JDOJwRnec25GMpnJCmQiIt2pf4a2f5yz97ZJF8CML0JDDdx78d77p34Wpl0G1eXw0Od333fFU/t8y0suuYRvfOMbu0LbQw89xHPPPce1115LZmYmZWVlHH300Zx33nltfhH+9a9/JTU1lWXLlrFo0SKOOOKIXft++ctfMmjQICKRCKeeeiqLFi3i2muv5be//S3z588nJydnt9dauHAh//jHP1iwYAHOOY466ihOOukksrKyWLVqFffffz9///vfmTVrFo888giXX375Pn9G8Uc4EqV4Rx1F22so2lHLpu1eGNv1vKN2t8uWKQlBRmWnMmJQKseMzWb4wBSGZ6Xses5OS1QYExHpgfpnaPPBtGnT2Lp1K8XFxZSWlpKVlcXQoUO57rrreO211wgEAmzatIktW7YwdOjQVl/jtdde49prrwVg8uTJTJ48ede+hx56iNtuu41wOExJSQlLly7dbf+e3njjDT71qU+RlpYGwKc//Wlef/11zjvvPMaMGcPUqVMBmD59OuvWreui34J0Vm1DhHXl1awrq2b9tho2bKthQ7n3vGcoM4MhGckMz0phyoiBfHJKHqOy0xidncbo7FRyM5IUykREeqH+GdraaxlLTG1/f1p2h1rWWnPxxRfz8MMPs3nzZi655BLuvfdeSktLWbhwIQkJCYwePZq6urr9ft2PP/6YW265hXfffZesrCzmzJnTqddpkpSUtGs5GAzudhlW4icSdRTvqGX11irWlFaxptQLaevKqynZufvnOSgtkRGDUpk6YiDnTRnGyOxU8rNSyB+YytABySSGAj79FCIiEi/9M7T55JJLLuGLX/wi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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "ax.plot(hgbr.train_score_, label=\"train\")\n",
    "ax.plot(hgbr.validation_score_, \"--\", label=\"validation\")\n",
    "ax.set_xlabel(\"Boosting iteration (trees)\")\n",
    "ax.set_ylabel(\"Negative loss (MSE)\")\n",
    "ax.legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Explaining what the model learned"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.barh(np.arange(X_train.shape[1]), gbr.feature_importances_,\n",
    "         tick_label=calhousing.feature_names)\n",
    "plt.xlabel(\"Normalized feature importance\")\n",
    "plt.title(\"Gradient Boosted Trees\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.barh(np.arange(X_train.shape[1]), rfr.feature_importances_,\n",
    "         tick_label=calhousing.feature_names)\n",
    "plt.xlabel(\"Normalized feature importance\")\n",
    "plt.title(\"Random Forest\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**WARNING**: tree-based importance is biased towards high cardinality features (such as continuous  numerical features). In many cases it is therefore recommended to use permutation based feature importances: https://christophm.github.io/interpretable-ml-book/feature-importance.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x648 with 5 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.inspection.partial_dependence import plot_partial_dependence\n",
    "\n",
    "features = [0, 5, 1, 2, (5, 1)]\n",
    "\n",
    "plot_partial_dependence(gbr, X_train, features,\n",
    "                        feature_names=calhousing.feature_names,\n",
    "                        n_jobs=-1, grid_resolution=50,\n",
    "                        fig=plt.figure(figsize=(10, 9)))\n",
    "fig.suptitle('Partial dependence of house value on nonlocation features\\n'\n",
    "             'for the California housing dataset');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tricks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Warm started models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train error: 0.695, test error: 0.763\n"
     ]
    }
   ],
   "source": [
    "X_train_small, X_val, y_train_small, y_val = train_test_split(\n",
    "    X_train, y_train, train_size=5000, test_size=1000)\n",
    "\n",
    "val_errors = []\n",
    "train_errors = []\n",
    "\n",
    "\n",
    "gbr = GradientBoostingRegressor(learning_rate=0.1, max_depth=8,\n",
    "                                min_samples_leaf=3, n_estimators=1)\n",
    "\n",
    "gbr.fit(X_train_small, y_train_small)\n",
    "\n",
    "train_error = median_absolute_error(y_train, gbr.predict(X_train))\n",
    "val_error = median_absolute_error(y_test, gbr.predict(X_test))\n",
    "\n",
    "train_errors.append(train_error)\n",
    "val_errors.append(val_error)\n",
    "\n",
    "print(\"train error: %0.3f, test error: %0.3f\" % (train_error, val_error)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_trees=10, train error: 0.412, test error: 0.444\n",
      "n_trees=20, train error: 0.281, test error: 0.300\n",
      "n_trees=30, train error: 0.226, test error: 0.250\n",
      "n_trees=40, train error: 0.203, test error: 0.225\n",
      "n_trees=50, train error: 0.194, test error: 0.219\n",
      "n_trees=60, train error: 0.188, test error: 0.216\n",
      "n_trees=70, train error: 0.184, test error: 0.217\n",
      "n_trees=80, train error: 0.180, test error: 0.217\n",
      "n_trees=90, train error: 0.176, test error: 0.216\n",
      "n_trees=100, train error: 0.172, test error: 0.214\n"
     ]
    }
   ],
   "source": [
    "for i in range(100):\n",
    "    gbr.set_params(warm_start=True, n_estimators=len(gbr.estimators_) + 1)\n",
    "    gbr.fit(X_train_small, y_train_small)\n",
    "    train_error = median_absolute_error(y_train, gbr.predict(X_train))\n",
    "    val_error = median_absolute_error(y_test, gbr.predict(X_test))\n",
    "\n",
    "    train_errors.append(train_error)\n",
    "    val_errors.append(val_error)\n",
    "    if (i + 2) % 10 == 0:\n",
    "        print(\"n_trees=%d, train error: %0.3f, test error: %0.3f\"\n",
    "              % (len(gbr.estimators_), train_error, val_error)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tree_indices = np.arange(len(val_errors)) + 1\n",
    "plt.plot(tree_indices, train_errors, label='training')\n",
    "plt.plot(tree_indices, val_errors, label='validation')\n",
    "plt.xlabel('number of trees')\n",
    "plt.ylabel('mean absolute error')\n",
    "plt.legend(loc='best');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early stopping with custom iteration loop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Converged at tree #51\n"
     ]
    }
   ],
   "source": [
    "patience = 5\n",
    "gbr = GradientBoostingRegressor(learning_rate=0.1, max_depth=8, min_samples_leaf=3,\n",
    "                                n_estimators=1, warm_start=True)\n",
    "\n",
    "best_error = np.inf\n",
    "\n",
    "for i in range(100):\n",
    "    gbr.set_params(n_estimators=i + 1)\n",
    "    gbr.fit(X_train_small, y_train_small)\n",
    "    val_error = median_absolute_error(y_test, gbr.predict(X_test))\n",
    "    if val_error < best_error:\n",
    "        best_error = val_error\n",
    "    else:\n",
    "        patience -= 1\n",
    "        if patience < 0:\n",
    "            print('Converged at tree #%d' % (i + 1))\n",
    "            break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Randomized parameter search with early stopping\n",
    "\n",
    "This feature is being implemented directly in scikit-learn as part of [PR #5689](https://github.com/scikit-learn/scikit-learn/pull/5689).\n",
    "\n",
    "Important hyper-parameters:\n",
    "\n",
    "- `loss`\n",
    "- `n_estimators` / `max_iter`\n",
    "- `max_depth` (typically much smaller than for random forests) or `max_leaf_nodes`\n",
    "- `min_samples_leaf` (help reduce the trees / model size and prediction speed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Probability calibration for classification confidence\n",
    "\n",
    "Motivation:\n",
    "\n",
    "- For realtime bidding: bid ~= CTR * expected revenue per click. CTR is a likelihood of clicking and can be estimated by the confidence level of the model.\n",
    "\n",
    "- For a recommender system, it might be interesting to put a threshold on the number of items you recommend to a specific user in a specific context: better make 1 or 2 good recommendations than 10 recommendations with 9 garbage items. In order for this threshold to stay meaningful when you change the way you train the models, it might be a good idea to calibrate the model confidence level.\n",
    "\n",
    "`GradientBoostingClassifier` has a `predict_proba` method but what it outputs tends to be mis-calibrated by default (similar to Support Vector Machines). It might be necessary to use Platt-scaling or Isotonic regression to recalibrate the model via cross-validation.\n",
    "\n",
    "See: http://scikit-learn.org/stable/modules/calibration.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Categorical features encoded as integers\n",
    "\n",
    "One-hot encoding is pretty useless for tree-based models (at least in scikit-learn). Contrary to other models it's pretty safe and much more efficient to use integer based encoding for instance using pandas:\n",
    "\n",
    "```python\n",
    "    >>> categorical_data.apply(lambda x: pd.factorize(x)[0])\n",
    "```\n",
    "\n",
    "alternatively you can use scikit-learn's [LabelEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Limitations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  Regression with homogeneous feature interactions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Trees required to approximate X1−X2:\n",
    "\n",
    "10 trees:\n",
    "\n",
    "<img \n",
    "  width=\"50%\"\n",
    "  src=\"http://nbviewer.jupyter.org/github/pprett/pydata-gbrt-tutorial/blob/master/func_approx_minus_2.png\" />\n",
    "  \n",
    "1000 trees:\n",
    "\n",
    "<img \n",
    "  width=\"50%\"\n",
    "  src=\"http://nbviewer.jupyter.org/github/pprett/pydata-gbrt-tutorial/blob/master/func_approx_minus_3.png\" />\n",
    "  \n",
    "Credits: https://github.com/pprett/pydata-gbrt-tutorial"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Multiclass classification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The training time, model size and prediction latency of Gradient Boosted Trees scale linearly with the number of classes...\n",
    "\n",
    "The following are possibly better models for multiclass classification with a large number of classes:\n",
    "\n",
    "- Random Forests\n",
    "- Linear models: multi-nomial logistic regression: might require extensive feature engineering to model non-linear interactions in original space. The nystroem method or polynomial features migth be useful in that case.\n",
    "- Neural Networks (MLP)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### High-dimensional feature spaces\n",
    "\n",
    "GBRT models tend to work better on lower dimensional space (typically less than 500 features). Using feature importances or other feature selection strategies might help focus the feature engineering effort. But it cannot deal with very high dim bag of words feature for text classification for instance.\n",
    "\n",
    "For very high-dimensional data, linear models will be much faster to train and possibly yield much better results. GBRT models can still be useful to blend predictions of other models, for instance:\n",
    "\n",
    "- free text fields in database columns + few numeric or categorical fields\n",
    "- train one TF-IDF (Bag of Words features) + logistic regression model per free-text field\n",
    "- train a GBRT model that uses logistic regression models' probabilistic predictions concatenated with numerical and (integer coded) categorical fields to compute the final predictions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## XGBoost and LightGBM\n",
    "\n",
    "XGBoost and LightGBM provide a more efficient implementation and notably supports multi-threading via a scikit-learn compatible interface. \n",
    "\n",
    "They also support out-of-core and distributed model fitting although via a different API.\n",
    "\n",
    "The new Histogram-based model of scikit-learn should be computationally competitive but (on single machine multithreads) but do not have all their features yet."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.51 s, sys: 801 µs, total: 3.51 s\n",
      "Wall time: 3.51 s\n",
      "train error: 0.130, test error: 0.193\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBRegressor\n",
    "\n",
    "xgbr = XGBRegressor(learning_rate=0.1, max_depth=8, n_estimators=100)\n",
    "%time xgbr.fit(X_train, y_train)\n",
    "print(\"train error: %0.3f, test error: %0.3f\" %\n",
    "      (median_absolute_error(y_train, xgbr.predict(X_train)),\n",
    "       median_absolute_error(y_test, xgbr.predict(X_test))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.2 ms ± 146 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit xgbr.predict(X_test[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model size: 1.3 MB\n"
     ]
    }
   ],
   "source": [
    "print(\"Model size: %0.1f MB\" % (len(dumps(xgbr)) / 1e6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
